/*
        先有外部类实例化的对象，才能生成内部类对象，内部类需要访问外部类成员，
		外部类只能通过内部类方法访问内部类成员。
		静态内部内只能访问外部类的静态数据
 */
public class Project {
    public static void main(String[] args){
        OutClass outClass = new OutClass();//定义外部类对象
        outClass.showCount();
        outClass.showCount();

        OutClass.InClass inClass = outClass.new InClass();//固定格式，通过外部类对象实例化内部类对象
        inClass.showCount();
        inClass.showCount();
        inClass.showCount();

        OutClass.InStaticClass inStaticClass = new OutClass.InStaticClass();//静态内部内只能访问外部类的静态数据
        inStaticClass.showCount();
    }
}

class OutClass{
    int count = 0;
    static int staticCount = 22;
    class InClass{
        int count = 0;
        void showCount(){
            this.count++;//操作本类成员
            System.out.println("OutClass count:"+this.count);//访问内部类成员
            System.out.println("InClass count:"+OutClass.this.count);//访问外部类成员
            System.out.println("---------");
        }
    }
    static class InStaticClass{
        int count = 0;
        void showCount(){
            this.count++;//操作本类成员
            System.out.println("InStaticClass count:"+this.count);//访问内部类成员
            System.out.println("OutClass staticCount:"+staticCount);//访问外部类静态成员
            System.out.println("---------");
        }
    }
    void showCount(){
        this.count++;
        System.out.println("OutClass count:"+this.count);
        System.out.println("---------");
    }
}